# 生产环境部署建议

## 环境要求

下面的表格列举了性能测试环境和生产环境的系统及硬件要求，您也可以参考容量规划章节，根据您的集群实际容量规划来精确订制部署方案。

::: warning 注意
由于DataNode使用了Linux内核的Punch Hole功能，因此需要根据DataNode的文件系统，选择对应的内核版本
:::

| 文件系统     | 内核版本要求    |
|----------|-----------|
| XFS      | \>=2.6.38 |
| ext4     | \>=3.0    |
| Btrfs    | \>=3.7    |
| tmpfs(5) | \>=3.5    |
| gfs2(5)  | \>=4.16   |

为了加快元数据读取速度，元数据都缓存在内存中，而DataNode数据主要占用磁盘资源，如果希望最大化利用节点资源，可以采用DataNode和MetaNode在同一节点混合部署的方式。

## 容量规划

首先你要预估集群在未来相当长的一段时间内，最高预期文件数量和存储容量。

其次你还要对目前拥有的机器资源有清晰地了解。知道每台机器的内存大小、CPU核心数、磁盘容量。

如果您对以上数据了解清楚了，可以通过第二小节给出的经验参考值来看看自己的当前环境属于哪一种规模，能承载怎样的文件体量，或者需要针对当前文件体验需求应该准备多少资源，以防止频繁扩充机器资源。

| 文件总数量 | 文件总储量 | 集群总内存   | 集群总磁盘空间 |
|-------|-------|---------|---------|
| 10亿   | 10PB  | 2048 GB | 10PB    |

::: tip 提示
大文件占比越高，MetaNode压力会越大。
:::

当然，如果您觉得目前的资源足够使用，不需要一次性满足容量增长需求，那么可以及时关注MetaNode/DataNode的容量预警信息。

::: tip 推荐
当内存或者磁盘即将使用完时，动态增加MetaNode/DataNode进行容量的调整。也就是说，如果发现磁盘空间不够了，可以增加磁盘或者增加DataNode，如果发现全部MetaNode内存过满，可以增加MetaNode来缓解内存压力。
:::

## 多机房部署

如果你希望集群需要支持机房容错性，可以部署跨机房的CubeFS集群。

同时需要注意一下几点：
- 由于机房之间的通信延迟高于单机房，所以如果对于高可用的要求大于低延迟，可以选择跨机房部署方案。
- 如果对性能要求更高，则建议单机房部署集群。

配置方案：在DataNode/MetaNode配置文件中修改zoneName参数，指定为所在机房名称，然后启动DataNode/MetaNode进程，则该机房会随着DataNode/MetaNode的注册而被Master存储并记录。

创建单机房volume：

``` bash
$ cfs-cli volume create {name} --zone-name={zone}
```

::: tip 提示
为了防止单机房volume初始化失败，请保证单个机房的DataNode/MetaNode不少于3。
:::

创建跨机房volume：

``` bash
$ cfs-cli volume create {name} --cross-zone=true
```